#!/bin/bash

echo "========================================"
echo "SFTPX CLI 项目验证"
echo "========================================"
echo ""

# 检查 Node.js 版本
echo "✓ 检查 Node.js 版本..."
if command -v node &> /dev/null; then
    NODE_VERSION=$(node --version)
    echo "  Node.js: $NODE_VERSION"
else
    echo "  ✗ Node.js 未安装"
fi

# 检查 npm 版本
echo "✓ 检查 npm 版本..."
if command -v npm &> /dev/null; then
    NPM_VERSION=$(npm --version)
    echo "  npm: $NPM_VERSION"
else
    echo "  ✗ npm 未安装"
fi

echo ""
echo "✓ 检查项目文件结构..."

FILES=(
    "package.json"
    "src/index.js"
    "src/cli.js"
    "src/config/configManager.js"
    "src/config/sshConfigManager.js"
    "src/sftp/sftpClient.js"
    "src/sftp/batchTransfer.js"
    "src/menus/mainMenu.js"
    "src/menus/connectionMenu.js"
    "src/menus/configMenu.js"
    "src/menus/fileTransferMenu.js"
    "src/utils/logger.js"
    "src/utils/progressBar.js"
    "src/utils/errorHandler.js"
    "src/utils/sessionLog.js"
    "src/utils/configHelper.js"
    "src/utils/pathUtils.js"
    "src/utils/sftpHelper.js"
    "bin/sftpx.js"
    "README.md"
    "LICENSE"
    ".gitignore"
    ".env.example"
    "example.config.json"
)

MISSING_FILES=0
for file in "${FILES[@]}"; do
    if [ -f "$file" ]; then
        echo "  ✓ $file"
    else
        echo "  ✗ 缺少: $file"
        ((MISSING_FILES++))
    fi
done

echo ""
echo "✓ 检查 node_modules..."
if [ -d "node_modules" ]; then
    PACKAGE_COUNT=$(ls -1 node_modules | wc -l)
    echo "  已安装 $PACKAGE_COUNT 个包"
else
    echo "  ✗ node_modules 未找到，请运行 npm install"
fi

echo ""
echo "✓ 验证 JavaScript 文件语法..."
SYNTAX_ERRORS=0
for js_file in src/**/*.js src/*.js bin/*.js; do
    if [ -f "$js_file" ]; then
        if node --check "$js_file" 2>/dev/null; then
            echo "  ✓ $js_file"
        else
            echo "  ✗ 语法错误: $js_file"
            ((SYNTAX_ERRORS++))
        fi
    fi
done

echo ""
echo "✓ 检查CLI命令可用性..."

# 使用本地方式运行命令
LOCAL_CLI="node src/cli.js"

# 测试基本命令
if $LOCAL_CLI --help > /dev/null 2>&1; then
  echo "  ✓ 命令 --help 可用"
else
  echo "  ✗ 命令 --help 不可用"
fi

if $LOCAL_CLI --version > /dev/null 2>&1; then
  echo "  ✓ 命令 --version 可用"
else
  echo "  ✗ 命令 --version 不可用"
fi

# 测试配置管理命令（这些命令需要参数，所以我们只测试命令是否被识别）
if $LOCAL_CLI set-auth 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 set-auth 可用"
else
  echo "  ✗ 命令 set-auth 不可用"
fi

if $LOCAL_CLI get-auth 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 get-auth 可用"
else
  echo "  ✗ 命令 get-auth 不可用"
fi

if $LOCAL_CLI remove-auth 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 remove-auth 可用"
else
  echo "  ✗ 命令 remove-auth 不可用"
fi

# 测试文件传输命令
if $LOCAL_CLI --put 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 --put 可用"
else
  echo "  ✗ 命令 --put 不可用"
fi

if $LOCAL_CLI --get 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 --get 可用"
else
  echo "  ✗ 命令 --get 不可用"
fi

if $LOCAL_CLI --mput 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 --mput 可用"
else
  echo "  ✗ 命令 --mput 不可用"
fi

if $LOCAL_CLI --mget 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 --mget 可用"
else
  echo "  ✗ 命令 --mget 不可用"
fi

if $LOCAL_CLI --ssh 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 --ssh 可用"
else
  echo "  ✗ 命令 --ssh 不可用"
fi

# 测试SSH配置管理命令
if $LOCAL_CLI --export-ssh 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 --export-ssh 可用"
else
  echo "  ✗ 命令 --export-ssh 不可用"
fi

if $LOCAL_CLI --export-all-ssh > /dev/null 2>&1; then
  echo "  ✓ 命令 --export-all-ssh 可用"
else
  echo "  ✗ 命令 --export-all-ssh 不可用"
fi

if $LOCAL_CLI --list-ssh > /dev/null 2>&1; then
  echo "  ✓ 命令 --list-ssh 可用"
else
  echo "  ✗ 命令 --list-ssh 不可用"
fi

if $LOCAL_CLI --remove-ssh 2>&1 | grep -q "用法"; then
  echo "  ✓ 命令 --remove-ssh 可用"
else
  echo "  ✗ 命令 --remove-ssh 不可用"
fi

echo ""
echo "========================================"
echo "验证结果"
echo "========================================"

if [ $MISSING_FILES -eq 0 ] && [ $SYNTAX_ERRORS -eq 0 ]; then
    echo "✓ 所有检查通过！"
    echo ""
    echo "现在可以运行："
    echo "  npm start          - 启动应用"
    echo "  node src/cli.js     - 直接运行CLI"
    echo "  node src/cli.js --help - 查看帮助"
    echo ""
    echo "主要功能："
    echo "  - SFTP文件传输（上传/下载/批量操作）"
    echo "  - SSH配置导出管理"
    echo "  - 交互式文件管理"
    exit 0
else
    echo "✗ 发现问题："
    echo "  - 缺少的文件: $MISSING_FILES"
    echo "  - 语法错误: $SYNTAX_ERRORS"
    exit 1
fi